﻿using System;
using System.Threading;

namespace MultithreadingApplication
{
    class Program
    {
        private static void ThreadProcess(object tag)
        {
            int i = 100;
            while (i > 0)
            {
                //Console.WriteLine("【" + Thread.CurrentThread.ManagedThreadId + "】" + string.Format("i:{0}", i));
                Console.WriteLine(string.Format("i:{0}", i));
                Thread.Sleep(10);
                i--;
            }
        }

        static void Main(string[] args)
        {
            // 独立创建线程
            Thread t = new Thread(ThreadProcess);
            t.Start(new object());

            // 线程池
            ThreadPool.QueueUserWorkItem(ThreadProcess, new object());
            //Task方式创建线程
            System.Threading.Tasks.Task.Factory.StartNew(ThreadProcess, new object());

            // 需要手动终止，当然现在终止可能线程还未运行完成。
            t.Abort();

            Console.ReadKey();
        }
    }
}
/*
 
C# 在 4.0 以后一共有3种创建线程的方式:

 1.Thread 自己创建的独立的线程, 优先级高,需要使用者自己管理。
 2.ThreadPool 有 .Net 自己管理, 只需要把需要处理的方法写好, 然后交个.Net Framework, 后续只要方法执行完毕, 则自动退出。
 3.Task 4.0 以后新增的线程操作方式, 类似 ThreadPool, 但效率测试比ThreadPool略高, Task对多核的支持更为明显,所以在多核的处理器中, Task的优势更为明显。 

 */